# 第八章
# “集合”
# 1 可以使用大括号来进行创建{}
s = {1, 2, 3, 4}
# 2 使用set（）函数来创建，int（），float（），print（），input（）
ss = set('1234')
print(type(s))
print(type(ss))


# 集合的添加和删除
#添加元素add（）
s.add(6)
print(s)
# 删除集合中的第一个元素pop（）
s.pop()
print(s)
# 删除集合中的元素remove（）
s.remove(4)
print(s)


# # 创建元组
# # 创建空元组
# tuple1 = ()
# print(tuple1)
# # 创建带有元素的元组，可以有元素类型
# tuple2 = (1, "a", 3, "hello", 2.2)
# print(tuple2)
# # 创建只有一个元素的元组
# tuple3 = (1,)
# print(tuple3)
# print(type(tuple3))
# #
#
# # （）代表的是元组  []代表的是列表  {}代表的是集合，字典
# # 使用tuble()函数将其他数据类型转换为元组类型。int（）
# # 语法格式：tuble（数据）
# # 将字符转换成元组
# tuple1 = tuple('hello,world')
# print(tuple1)
# # 将列表转换为元组
# list1 = ['python', 'Java', 'C++', 'C']
# tuple2 = tuple(list1)
# print(tuple2)


t1 = ('w', 'o', 'x', 'i', 'a', 'n', 'n', 'g', 'f', 'a', 'n', 'g', 'j', 'i', 'a')
print(t1)

print(t1[4])
print(t1[7:11])
print(t1[-14:-12])



# # 修改元组元素
# t1 = (1,2,3)
# t2 = ('a','b','c')
# # 连接组合
# t3 = t1 + t2
# print(t3)
# # 修改元组元素操作是非法的
# # t1[0] = 100


# # 删除元组del 元组名
# t3 = (1,2,3,5,6)
# print(t3)
# del t3


# 内置函数
# cmp（tuple1，tuple2）比较两个元组元素
# len(tuple)计算元组元素个数
# max（tuple）返回元组中元素最大值
# min（tuple）返回元组中元素最小值
# tuple（seq）将列表转换为元组


# name  姓名
# telephone  电话
# address  地址
# n = input('请输入嫌疑人姓名：')
# t = input('请输入嫌疑人电话：')
# e = input('请输入嫌疑人邮箱：')
# a = input('请输入嫌疑人地址：')
# t1 = ("姓名：", n, "电话", t, "邮箱:", e, "地址：", a)
# print(t1)


# # 列表的创建
# # 1 使用[] 直接创建列表
# # 1.1创建空列表
# l1 = []
# print(l1)


# # 1.2创建带有元素的列表
# l2 = [1, 2, "python","java"]
# print(l2)
# print(type(l2))


# # 2.使用list（）函数将其他类型数据（字符串 元组 range函数）转换为列表：
# # 2.1 创建空列表
# l3 = list()
# print(l3)


# # 2.2 将字符串转换成列表
# l4 = list("hello world")
# print(l4)


# # 2.3 将元组转换成列表
# t5 = tuple("hello")
# print(l5)


# # 2.4 将range函数转化为列表
# l6 = list(range(5))
# print(l6)


#  访问列表中的元素
# 使用索引进行访问单个元素
# l7 = [1, 2, 3, 4, 'p', 'w', 'r']


# # 使用正索引访问p元素
# print(l7[4])


# # 使用负索引访问w元素
# print(l7[-2])


# # 2. 使用切片访问一组元素
# # 使用切片访问元素的格式 代码如下
# l8 = ['p', 'y', 't', 'h', 'o', 'n']
# # 使用正数切片，截取索引为2.3.4的元素，默认步长为1
# print(l8[2:5])
# # 取前三个元素
# print(l8[:3])
# # 取后三个元素
# print(l8[3:])
# # 使用正数切片，截取索引为1-5的元素，步长为2
# print(l8[1::2])
# # 使用负数切片
# print(l8[-3:-1])
# # 步长如果是负数，即从右向左提取元素
# print(l8[::-1])


# # 遍历列表
# # 使用for循环遍历列表
# l9 = [5, 4, 1, 8, "python", "java", 'c']
# for i in l9:
#     print(i)


# # 修改列表元素
# # 修改单个元素
# l10 = [10, 56, 34, 2, 56, 44, 7]
# # 将索引为2的元素值修改为100
# l10[2] = 10
# print(l10)


# # 修改多个元素
# l11 = [10, 56, 34, 2, 56, 44, 7]
# # 修改第1-4个元素的值（不包括第四个元素）
# l11[1:4] = [45, -56, 98]
# print(l11)


# # 列表中添加元素
# # 1.append()用于在列表的末尾追加元素
# l12 = ['a', 'b', 'c', 'f']
# print(l12)

# # 列表中添加列表
# l12.append(['e', 'f'])
# print(l12)


# # 2.extend( )在列表的末尾一次添加多个元素
# l13 = ['a', 'b', 'c']
# l13.extend('d')
# print(l13)


# # 列表添加列表
# l13.extend(['e', 'f', 'g', 'h'])
# print(l13)
# l13.extend('world')
# print(l13)


# # 3, insert()在列表中的特定位置添加想要添加的特定元素
# l14 = ['python', 'c', 'java']
# # 插入特定元素，在索引为2处插入go元素
# l14.insert(2, 'go')
# print(l14)


# # 删除元素
# # remove()删除特定元素
# l15 = ['a', 'b', 'c', 'd', 'a']
# l15.remove('b')
# print(l15)
# # 若元素不在列表中删除会报错
#
#
# # pop（）方法用来删除列表中指定索引处的元素
# # l16 = [10, 56, 34, 2, 56, 44, 7]
# # # 删除索引为3的元素
# # # l16.pop(3)
# # # print(l16)
# l16 = [10, 2, 4, 6, 8, 'a']
# l16.pop(3)
# print(l16)
#
#
# # 删除最后一个元素
# l16.pop()
# print(l16)

# l17 = ['a', 'b', 2, 3, 5, 9]
# # del删除单个元素
# del l17[4]
# print(l17)
# # del删除一段连续的元素，使用切片形式
# del l17[1: 3]
# print(l17)


# # 清空列表用clear（）方法
# l18 = [6, 8, 'a', 0]
# l18.clear()
# print(l18)


# # 任务
# # 创建两个空列表name_list和phone_list，用于存储联系人姓名和电话；
# # 向列表中添加联系人信息；
# # 输入联系人编号修改信息；
# # 输入联系人编号删除信息；
# # # 使用clear()清空通讯录。name_list=['张三'， ’李四', '王五', ‘maliu'],phone_list=[123, 236, 258, 598]
# name_list = []
# phone_list = []
# while 1:
#     print("菜单:1.添加联系人 2.修改联系人 3.删除联系人")
#     chioce = input("请输入选择：")
#     # 1.添加联系人，包括姓名，手机号
#     if chioce == "1":
#         name_list.append(input("请输入联系人姓名："))
#         phone_list.append(input("请输入联系人手机号"))
#         print(name_list)
#         print(phone_list)
#     # 2.修改联系人信息
#     elif chioce == "2":
#         num = int(input("请输入联系人编号"))
#         if len(name_list) > 0 and num <= len(name_list):
#             name_list[num - 1] = input("修改联系人姓名")
#             phone_list[num - 1] = input("修改联系人电话")
#         else:
#             print("联系编号输入有误")
#     # 3.删除联系人信息
#     elif chioce == "3":
#         num = int(input("请输入联系人编号："))
#         if len(name_list) > 0 and num <= len(name_list):
#             name_list.pop(num-1)
#             phone_list.pop(num - 1)
#         else:
#             print("联系人编号输入有误")
#     else:
#         print("显示联系人信息")
#         print(name_list)
#         print(phone_list)


# 查找元素 index（）列表名.index【要查找的元素】
# ls1 = [1，3，5,7，'a','b','8',3,'b',2]

# ls1 = [1, 5, 7, 'a', 'c', 'b', 6, 4, 1]
# print(ls1.index('a'))
# print(ls1.index('a', 1))
# print(ls1.index('c', 3, 7))
# # print(ls1.index(2))


# ls2 = [1, 3, 5, 7, 'a', 'b', '8', 3, 'b', 2, 5, 7, 1]
# print(ls2.count(8))
# print(ls2.count(5))
# print(ls2.count('f'))

# 元素排序 sort（）函数用于对原列表进行排序，如果指定参数，则使用指定的比较函数
# 语法格式为：ls.sort（key=none，rever=false）
# 1.元素是字符串的排序
# ls3 = ['1', '3', '44', '23', '99', '88', '56', '233']
# # 默认升序，reverse=false，不写
# ls3.sort()
# print(ls3)
# # 降序 reverse=true
# ls3.sort(reverse=True)
# print(ls3)

# # 2.元素是数值的排序
# ls4 = ['1', '3', '44', '23', '99', '88', '56', '233']
# # 默认升序
# ls4.sort()
# print(ls4)
# # 降序reverse=True
# ls4.sort(reverse=True)
# print(ls4)

# """字典"""
# # 字典的创建
# # 1.使用{ } 创建字典语法格式
# # 字典名 = {'key':'value1', 'key2':value2', ..., 'keyn':valuen}
# # 使用字符串作为key
# d1 = {'python': 90, "可视化": 89, "英语": 85}
# print(type(d1))
# # 使用元组的数字作为key
# d2 = {(23, 89): "great", 30: [1, 3, 4]}
# print(type(d2))
# # 创建空字典
# d3 = {}
# print(type(d3))
#
# # 2,用dict（）方法通过关键字的参数来创建字典格式
# # 字典名=dict（key1=value1，key2=value2，key3=value3）
# d4 = dict(数学=98, 语文=88, 英语=91)
# print(d4)




#  12月5日
# # # 字典元素的访问
# # # 1，字典名[key]
# # d5 = {'董': 96, '康': 97, '刘': 98}
# # # 健存在
# # print(d5['董'])
# # # 键不存在，引发一个keyerror
# #
# # # 2.get()方法来获取指定键对应的值，语法格式，字典名.get（key[default])
# # print(d6.get('魏'))
# # print(d6.get('刘'))
# # print(d6.get('魏','该建不存在'))


# # 字典添加键值对
# d7 = {'数学':95, '英语': 92, '语文': 96, 'python': 99}
# d7['可视化'] = 100
# print(d7)


# # 字典修改键值对
# d8 = {'数学': 95, '英语': 92, '语文': 96, 'python': 99}
# d8['语文'] = 100
# print(d8)


# 字典删除键值对
# 1.使用del关键字
# d9 = {'数学': 95, '英语':92, '语文': 96, 'python': 99}
# del d9['语文']
# print(d9)
# 
# # 2. 使用pop()方法
# d9.pop('数学')
# print(d9)